package s03;

/**
 * @ClassName SellTicket
 * @Description TODO
 * @Author Li
 * @Date 2022/8/8 10:01
 * @ModifyDate 2022/8/8 10:01
 * @Version 1.0
 */
public class SellTicket implements Runnable {
    // 模拟100张票
    private int tickets = 100;

    Object obj = new Object();

    /**
     * 执行卖票操作
     */
    @Override
    public void run() {
        // 每个窗口的卖票操作
        // 窗口永远开启
        while (true) {
            // 使用sleep模拟一下卖票前操作
            try {
                Thread.sleep(5);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            sell();
        }
    }

    /**
     * 锁对象：谁调用这个方法就是谁
     * 隐含锁对象就是this
     */
    private synchronized void sell() {
        // 当有票的时候
        if (tickets > 0) {
            // 出票操作
            // 获取当前线程名称
            String name = Thread.currentThread().getName();
            System.out.println(name + "正在卖第" + tickets + "张票");
            tickets--;
        }
    }
}
